package server

import (
	v1 "demo01/api/helloworld/v1"
	"demo01/internal/conf"
	"demo01/internal/service"
	"github.com/go-kratos/kratos/v2/log"
	"github.com/go-kratos/kratos/v2/middleware/logging"
	"github.com/go-kratos/kratos/v2/middleware/recovery"
	"github.com/go-kratos/kratos/v2/middleware/tracing"
	"github.com/go-kratos/kratos/v2/transport/http"
)

// NewHTTPServer new an HTTP server.
func NewHTTPServer(c *conf.Server, greeter *service.GreeterService, demo *service.DemoService, logger log.Logger) *http.Server {
	//testKey := "testKey"
	var opts = []http.ServerOption{
		http.Middleware(
			recovery.Recovery(),
			tracing.Server(),
			logging.Server(logger),
			//jwt.Server(func(token *jwtv4.Token) (interface{}, error) {
			//	fmt.Println(token.Raw)
			//
			//	ss := []byte(testKey)
			//	fmt.Println(ss)
			//	return ss, nil
			//}, jwt.WithSigningMethod(jwtv4.SigningMethodHS256)),
		),
	}
	if c.Http.Network != "" {
		opts = append(opts, http.Network(c.Http.Network))
	}
	if c.Http.Addr != "" {
		opts = append(opts, http.Address(c.Http.Addr))
	}
	if c.Http.Timeout != nil {
		opts = append(opts, http.Timeout(c.Http.Timeout.AsDuration()))
	}
	srv := http.NewServer(opts...)
	v1.RegisterGreeterHTTPServer(srv, greeter)

	v1.RegisterDemoHTTPServer(srv, demo)

	//h := openapiv2.NewHandler()
	//srv.HandlePrefix("/q/", h)
	return srv
}
